package com.bangdao.juc;

/**
 * @author chen
 * @create 2021-01-02
 */

/**
 * 初始化线程4中方式：
 * 1.继承Thread基类
 * 2.实现Runnable接口
 *      1.自定义一个实现类实现Runnable接口
 *      2.匿名内部类方式
 *      3.lambda表达式
 * 3.实现Callable接口
 * 4.线程池
 */
public class ThreadDemo {
    public static void main(String[] args) {
        System.out.println("这是主线程：" + Thread.currentThread().getName());
        //1.继承Thread基类
        new MyThread().start();
        System.out.println("=============================================");
        //2.1自定义一个实现类实现Runnable接口
        new Thread(new MyRunnable(), "实现Runnable接口").start();
        //2.2匿名内部类方式
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("这是通过实现runnable匿名内部类方式初始化一个线程：" + Thread.currentThread().getName());
            }
        }, "匿名内部类方式").start();
        //3.lambda表达式
        new Thread(() -> {
            System.out.println("这是通过实现lambda方式初始化一个线程：" + Thread.currentThread().getName());
        },"lambda表达式").start();
    }
}

/**
 * 实现线程方式一：继承Thread基类
 */
class MyThread extends Thread {
    @Override
    public void run() {
        //Thread.currentThread().getName() 获取当前线程名
        System.out.println("这是通过继承Thread抽象类初始化一个子线程  " + Thread.currentThread().getName());
    }
}

/**
 * 实现线程方式二：实现Runnable接口
 */
class MyRunnable implements Runnable {
    @Override
    public void run() {
        System.out.println("这是通过实现runnable接口初始化一个线程：" + Thread.currentThread().getName());
    }
}